package gemsa.modeles;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.sql.DataSource;

import java.util.ArrayList;
import java.util.List;
import java.util.Date;
import java.util.Calendar;
import java.text.SimpleDateFormat;

import gemsa.beans.Question;
import gemsa.beans.Ssaxe;
import gemsa.outils.GestionBaseDeDonnees;
import gemsa.modeles.ModeleSousAxe;


/**
 * Classe ModeleQuestion
 * @author Projet Dev Groupe 33
 * @version 1.0 Finale (commentaires � enlever)
 */
 
public class ModeleQuestion 
{
	// Variables
	DataSource datasource=null;
	Connection connexion=null;
	ResultSet resultat=null;
	
	// Variables de pagination
	private int maxParPage;
	private int pageActuel;
	private int totalElement;
	
	// Constructeur par d�faut
	public ModeleQuestion(DataSource datasource)
	{		
		this.datasource=datasource;
	}
	
	// Accesseurs
	public int getMaxParPage() 
	{
		return maxParPage;
	}

	public int getPageActuel() 
	{
		return pageActuel;
	}

	public int getTotalElement() 
	{
		return totalElement;
	}

	
	// Retourner la liste des sous-axes
	public List<Question> listeQuestion()
	{
		// Variables
		PreparedStatement requete=null;
		Question question=null;
		String requeteString=null;
		List<Question> listeQuestion=new ArrayList<Question>();
		
		try
		{
			// Ouverture d'une connexion
			connexion=datasource.getConnection();
			
			// Cr�ation de la requ�te
			requeteString="SELECT * FROM question ORDER BY enoncequestion ASC";
			
			// On pr�pare la requ�te
			requete=connexion.prepareStatement(requeteString);
				
			// Execution de la requ�te
			resultat=requete.executeQuery();

			// On stocke le resultat dans une liste
			if(resultat!=null)
			{
				while(resultat.next())
				{
					// On effectue le mapping des attributs avec les champs de la table SQL
					question=questionAttributsMapper(resultat);
					
					// Ajoute l'objet a la liste des sous-axes
					listeQuestion.add((Question)question);
				}
			}
		}
		catch(Exception e)
		{
			System.out.println("Erreur dans la requete dans la classe ModeleQuestion fonction listeQuestion");
		}
		finally
		{
			try
			{
				// Fermeture de la connexion
				if(resultat!=null)
				{
					GestionBaseDeDonnees.closeResulset(resultat);
				}
				if(requete!=null)
				{
					GestionBaseDeDonnees.closeRequest(requete);
				}
				if(connexion!=null)
				{
					GestionBaseDeDonnees.closeConnection(connexion);
				}
			}
			catch(Exception ex)
			{
				System.out.println("Erreur lors de la fermeture de la connexion avec la base de donn�es dans la classe ModeleQuestion fonction listeQuestion");
			}	
		}
		
		// Retourner la liste des axes
		return listeQuestion;
	}
	
	
	// R�cup�rer la liste des questions
	public List<Question> listerQuestion(int idSsaxe, int maxParPage, int pageActuel)
	{	
		// Variables
		PreparedStatement requete=null;
		Question question=null;
		String requeteString=null;
		List<Question> listeQuestion=new ArrayList<Question>();
		int position=0;
	
		try
		{			
			// Ouverture d'une connexion
			connexion = datasource.getConnection();
		
			// Premi�re requ�te : on r�cup�re le nombre total de questions
			
			// On cr�� la requ�te
			requeteString="SELECT COUNT(DISTINCT(question.id_question)) as total FROM question WHERE etatquestion=1";

			// Si il s'agit d'un listing de questions en fonction du sous-axe, on modifie la requ�te en cons�quence
			if(idSsaxe!=0)
			{
				requeteString+=" AND id_ssaxe=?";
				
				// On pr�pare la requ�te
				requete=connexion.prepareStatement(requeteString);
				requete.setInt(1,idSsaxe);
			}
			// Dans le cas contraire on liste tous les questions
			else
			{
				// On pr�pare la requ�te
				requete=connexion.prepareStatement(requeteString);
			}
			
			// Execution de la requ�te
			resultat=requete.executeQuery();
			
			// On r�cup�re le nombre de questions
			if(resultat!=null)
			{
				if(resultat.next())
				{
					this.totalElement=resultat.getInt("total");
				}
			}
			
			// On v�rifie que la page demand�e est valable
			position=maxParPage*(pageActuel-1);
			if(position>totalElement || maxParPage>totalElement)
			{
				pageActuel=1;
			}
			
			// On d�finit les variables de pagination finales
			position=maxParPage*(pageActuel-1);
			this.maxParPage=maxParPage;
			this.pageActuel=pageActuel;
			
			// Deuxi�me requ�te : on r�cup�re la liste suivant une pagination
			requeteString="SELECT * FROM question WHERE etatquestion=1";

			// Si il s'agit d'un listing de questions en fonction du sous-axe, on modifie la requ�te en cons�quence
			if(idSsaxe!=0)
			{
				requeteString+=" AND id_ssaxe=?";
				requeteString+=" LIMIT " + position + "," + maxParPage;
				
				// On pr�pare la requ�te
				requete=connexion.prepareStatement(requeteString);
				requete.setInt(1, idSsaxe);
			}
			// Dans le cas contraire on liste tous les questions
			else
			{
				requeteString+=" LIMIT " + position + "," + maxParPage;
				
				// On pr�pare la requ�te
				requete=connexion.prepareStatement(requeteString);
			}
	
			// Execution de la requ�te
			resultat=requete.executeQuery();

			// On stocke le resultat une la liste de questions
			if(resultat!=null)
			{
				while(resultat.next())
				{
					// On effectue le mappage des attributs avec les champs de la table SQL
					question=questionAttributsMapper(resultat);
					
					// Ajoute l'objet a la liste de questions
					listeQuestion.add((Question)question);
				}
			}
		}
		catch(Exception e)
		{
			System.out.println(e);
			System.out.println("Erreur dans la requete dans la classe ModeleQuestion fonction listeQuestion");
		}
		
		finally
		{
			try
			{
				// Fermeture de la connexion
				if(resultat!=null)
				{
					GestionBaseDeDonnees.closeResulset(resultat);
				}
				if(requete!=null)
				{
					GestionBaseDeDonnees.closeRequest(requete);
				}
				if(connexion!=null)
				{
					GestionBaseDeDonnees.closeConnection(connexion);
				}
			}
			catch(Exception ex)
			{
				System.out.println("Erreur lors de la fermeture de la connexion avec la base de donn�es dans la classe ModeleQuestion fonction listerQuestion");
			}	
		}
		
		// Retourner la liste des questions
		return listeQuestion;
	}
	
	
	
	// Retourner la liste des questions en promotion
	public List<Question> listerQuestionEnPromotion(int maxParPage, int pageActuel)
	{	
		// Variables
		PreparedStatement requete=null;
		Question question=null;
		String requeteString=null;
		List<Question> listeQuestion=new ArrayList<Question>();
		int position=0;
	
		try
		{			
			// Ouverture d'une connexion
			connexion=datasource.getConnection();
		
			// Premi�re requ�te : on r�cup�re le nombre total d'questions
			requeteString="SELECT COUNT(DISTINCT(question.id_question)) as total FROM question WHERE etatquestion=1 AND reductionquestion > 0";
			
			// On pr�pare la requ�te
			requete=connexion.prepareStatement(requeteString);
			
			// Execution de la requ�te
			resultat=requete.executeQuery();
			
			// On r�cup�re le nombre d'questions
			if(resultat!=null)
			{
				if(resultat.next())
				{
					this.totalElement=resultat.getInt("total");
				}
			}
			
			// On v�rifie que la page demand� est valable
			position=maxParPage*(pageActuel-1);
			if(position>totalElement || maxParPage>totalElement)
			{
				pageActuel=1;
			}
			
			// On d�finit les variables de pagination finales
			position=maxParPage*(pageActuel-1);
			this.maxParPage=maxParPage;
			this.pageActuel=pageActuel;
			
			// Deuxi�me requ�te : on r�cup�re la liste suivant une pagination
			requeteString="SELECT * FROM question WHERE etatquestion=1 AND reductionquestion > 0 LIMIT " + position + "," + maxParPage;
					
			// On pr�pare la requ�te
			requete=connexion.prepareStatement(requeteString);
			
			// Execution de la requ�te
			resultat=requete.executeQuery();

			// On stocke le resultat une la liste d'questions
			if(resultat!=null)
			{
				while(resultat.next())
				{
					// On effectue le mapping des attributs avec les champs de la table SQL
					question=questionAttributsMapper(resultat);
					
					// Ajoute l'objet � la liste d'questions
					listeQuestion.add((Question)question);
				}
			}
		}
		catch(Exception e)
		{
			System.out.println("Erreur dans la requete dans la classe ModeleQuestion fonction listerQuestionEnPromotion");
		}
		finally
		{
			try
			{
				// Fermeture de la connexion
				if(resultat!=null)
				{
					GestionBaseDeDonnees.closeResulset(resultat);
				}
				if(requete!=null)
				{
					GestionBaseDeDonnees.closeRequest(requete);
				}
				if(connexion!=null)
				{
					GestionBaseDeDonnees.closeConnection(connexion);
				}
			}
			catch(Exception ex)
			{
				System.out.println("Erreur lors de la fermeture de la connexion avec la base de donn�es dans la classe ModeleQuestion fonction listerQuestionEnPromotion");
			}	
		}
		
		// Retourner la liste des questions
		return listeQuestion;
	}
	
	
	// Retourner la liste des nouvelles questions
	public List<Question> listerNouveauQuestionPaginer(int maxParPage, int pageActuel, String champTri, String typeTri)
	{	
		//* Variables
		PreparedStatement requete=null;
		Question question=null;
		String requeteString=null;
		Date dateLimite=null;
		Calendar calendrier=null;
		SimpleDateFormat dateFormat=null;
		List<Question> listeQuestion=new ArrayList<Question>();
		int position=0;
	
		try
		{	
			// Initialisation du format de la date
			dateFormat=new SimpleDateFormat("yyyyMMdd");
			
			// Date limite : 30 jours avant
	        calendrier=new java.util.GregorianCalendar(); 
	        calendrier.add(Calendar.DAY_OF_YEAR, -30);
	        dateLimite=calendrier.getTime();
			
			// Ouverture d'une connexion
			connexion=datasource.getConnection();
		
			// Premi�re requ�te : on r�cup�re le nombre total de questions
			requeteString="SELECT COUNT(DISTINCT(question.id_question)) as total FROM question WHERE etatquestion=1 AND datequestion >= ?";
			
			// On pr�pare la requ�te
			requete=connexion.prepareStatement(requeteString);
			requete.setInt(1, Integer.parseInt(dateFormat.format(dateLimite)));
			
			// Execution de la requ�te
			resultat=requete.executeQuery();
			
			// On r�cup�re le nombre de questions
			if(resultat!=null)
			{
				if(resultat.next())
				{
					this.totalElement=resultat.getInt("total");
				}
			}
			
			// On v�rifie que la page demand�e est valable
			position=maxParPage*(pageActuel-1);
			if(position>totalElement || maxParPage>totalElement)
			{
				pageActuel=1;
			}
			
			// On d�finit les variables de pagination finales
			position=maxParPage*(pageActuel-1);
			this.maxParPage=maxParPage;
			this.pageActuel=pageActuel;

			
			// Deuxi�me requ�te : on r�cup�re la liste suivant une pagination
			requeteString="SELECT * FROM question WHERE etatquestion=1 AND datequestion >= ? ORDER BY " + champTri + " " + typeTri + " LIMIT " + position + "," + maxParPage;
					
			// On pr�pare la requ�te
			requete=connexion.prepareStatement(requeteString);
			requete.setInt(1, Integer.parseInt(dateFormat.format(dateLimite)));
			
			// Execution de la requ�te
			resultat=requete.executeQuery();

			// On stocke le resultat une la liste de questions
			if(resultat!=null)
			{
				while(resultat.next())
				{
					// On effectue le mapping des attributs avec les champs de la table SQL
					question=questionAttributsMapper(resultat);
					
					// Ajoute l'objet a la liste d'question
					listeQuestion.add((Question)question);
				}
			}
		}
		catch(Exception e)
		{
			System.out.println(e);
			System.out.println("Erreur dans la requete dans la classe ModeleQuestion fonction listerNouveauQuestionPaginer");
		}
		finally
		{
			try
			{
				// Fermeture de la connexion
				if(resultat!=null)
				{
					GestionBaseDeDonnees.closeResulset(resultat);
				}
				if(requete!=null)
				{
					GestionBaseDeDonnees.closeRequest(requete);
				}
				if(connexion!=null)
				{
					GestionBaseDeDonnees.closeConnection(connexion);
				}
			}
			catch(Exception ex)
			{
				System.out.println("Erreur lors de la fermeture de la connexion avec la base de donn�es dans la classe ModeleQuestion fonction listerNouveauQuestionPaginer");
			}	
		}
		
		// Retourner la liste des questions
		return listeQuestion;
	}
	
	
	
	
	// Retourner la liste des nouvelles questions
	public List<Question> listerNouveauQuestion()
	{	
		// Variables
		PreparedStatement requete=null;
		Question question=null;
		String requeteString=null;
		Date dateLimite=null;
		Calendar calendrier=null;
		SimpleDateFormat dateFormat=null;
		List<Question> listeQuestion=new ArrayList<Question>();
	
		try
		{	
			// Initialisation du format de la date
			dateFormat=new SimpleDateFormat("yyyyMMdd");
			
			// Date limite : 30 jours avant
	        calendrier=new java.util.GregorianCalendar(); 
	        calendrier.add(Calendar.DAY_OF_YEAR, -30);
	        dateLimite=calendrier.getTime();
			
			// Ouverture d'une connexion
			connexion=datasource.getConnection();
			
			// Cr�ation de la requ�te
			requeteString="SELECT * FROM question WHERE etatquestion=1 AND datequestion >= ?";
					
			// On pr�pare la requ�te
			requete=connexion.prepareStatement(requeteString);
			requete.setInt(1, Integer.parseInt(dateFormat.format(dateLimite)));
			
			// Execution de la requ�te
			resultat=requete.executeQuery();

			// On stocke le resultat une la liste d'questions
			if(resultat!=null)
			{
				while(resultat.next())
				{
					// On effectue le mapping des attributs avec les champs de la table SQL
					question=questionAttributsMapper(resultat);
					
					// Ajoute l'objet � la liste d'questions
					listeQuestion.add((Question)question);
				}
			}
		}
		catch(Exception e)
		{
			System.out.println(e);
			System.out.println("Erreur dans la requete dans la classe ModeleQuestion fonction listerNouveauQuestion");
		}
		finally
		{
			try
			{
				// Fermeture de la connexion
				if(resultat!=null)
				{
					GestionBaseDeDonnees.closeResulset(resultat);
				}
				if(requete!=null)
				{
					GestionBaseDeDonnees.closeRequest(requete);
				}
				if(connexion!=null)
				{
					GestionBaseDeDonnees.closeConnection(connexion);
				}
			}
			catch(Exception ex)
			{
				System.out.println("Erreur lors de la fermeture de la connexion avec la base de donn�es dans la classe ModeleQuestion fonction listerNouveauQuestion");
			}	
		}
		
		// Retourner la liste des questions
		return listeQuestion;
	}
	
	
	// R�cup�rer une question
	public Question getQuestion(int idQuestion)
	{	
		// Variables
		PreparedStatement requete=null;
		Question question=null;
		String requeteString=null;
	
		try
		{			
			// Ouverture d'une connexion
			connexion=datasource.getConnection();
			
			// Cr�ation de la requ�te
			requeteString="SELECT * FROM question WHERE id_question=?";
			
			// On pr�pare la requ�te
			requete=connexion.prepareStatement(requeteString);
			requete.setInt(1,idQuestion);
				
			// Execution de la requ�te
			resultat=requete.executeQuery();

			// On stocke le resultat dans l'objet question
			if(resultat!=null)
			{
				if(resultat.next())
				{
					// On effectue le mapping des attributs avec les champs de la table SQL
					question=questionAttributsMapper(resultat);
				}
			}
		}
		catch(Exception e)
		{
			// L'id de la question n'exite pas, on initialise la question � null
			question=null;
			System.out.println("Erreur dans la requete dans la classe ModeleQuestion fonction getQuestion");
		}
		finally
		{
			try
			{
				// Fermeture de la connexion
				if(resultat!=null)
				{
					GestionBaseDeDonnees.closeResulset(resultat);
				}
				if(requete!=null)
				{
					GestionBaseDeDonnees.closeRequest(requete);
				}
				if(connexion!=null)
				{
					GestionBaseDeDonnees.closeConnection(connexion);
				}
			}
			catch(Exception ex)
			{
				System.out.println("Erreur lors de la fermeture de la connexion avec la base de donn�es dans la classe ModeleQuestion fonction getQuestion");
			}	
		}
		
		// Retourner la question
		return question;
	}
	
	
	
	
	/* =========================================
	 * Partie Admin
	 * =========================================
	 */
	
	// Retourner la liste des questions
	public List<Question> listeQuestionAdmin(int maxParPage, int pageActuel)
	{	
		// Variables
		PreparedStatement requete=null;
		Question question=null;
		String requeteString=null;
		List<Question> listeQuestion=new ArrayList<Question>();
		int position=0;
	
		try
		{			
			// Ouverture d'une connexion
			connexion=datasource.getConnection();
			
			// Premi�re requ�te : on r�cup�re le nombre total de questions
			requeteString="SELECT COUNT(DISTINCT(question.id_question)) as total FROM question WHERE 1";
		
			// Pr�paration de la requ�te
			requete=connexion.prepareStatement(requeteString);
			
			// Execution de la requ�te
			resultat=requete.executeQuery();
			
			// On r�cup�re le nombre de questions
			if(resultat!=null)
			{
				if(resultat.next())
				{
					this.totalElement=resultat.getInt("total");
				}
			}
			// On v�rifie que la page demand�e est valable
			position=maxParPage*(pageActuel-1);
			if(position>totalElement || maxParPage>totalElement)
			{
				pageActuel=1;
			}
			
			// On d�finit les variables de pagination finale
			position=maxParPage*(pageActuel-1);
			this.maxParPage=maxParPage;
			this.pageActuel=pageActuel;
		
			// Deuxi�me requ�te : on r�cup�re la liste suivant une pagination
			requeteString="SELECT * FROM question WHERE 1";
	
			requeteString+=" LIMIT " + position + "," + maxParPage;
			
			// Pr�paration de la requ�te
			requete=connexion.prepareStatement(requeteString);
	
			// Execution de la requ�te
			resultat=requete.executeQuery();

			// On stocke le resultat dans une liste
			if(resultat!=null)
			{
				while(resultat.next())
				{
					// On effectue le mapping des attributs avec les champs de la table SQL
					question=questionAttributsMapper(resultat);
					
					// Ajoute l'objet a la liste d'questions
					listeQuestion.add((Question)question);
				}
			}
		}
		catch(Exception e)
		{
			System.out.println("Erreur dans la requete dans la classe ModeleQuestion fonction ListeQuestionAdmin");
		}
		finally
		{
			try
			{
				// Fermeture de la connexion
				if(resultat!=null)
				{
					GestionBaseDeDonnees.closeResulset(resultat);
				}
				if(requete!=null)
				{
					GestionBaseDeDonnees.closeRequest(requete);
				}
				if(connexion!=null)
				{
					GestionBaseDeDonnees.closeConnection(connexion);
				}
			}
			catch(Exception ex)
			{
				System.out.println("Erreur lors de la fermeture de la connexion avec la base de donn�es dans la classe ModeleQuestion fonction ListeQuestionAdmin");
			}	
		}
		
		// Retourner la liste des questions
		return listeQuestion;
	}
	
	
	
	// Ajouter une question
	public int ajouterQuestion(Question question)
	{	
		// Variables
		PreparedStatement requete=null;
		String requeteString=null;
		int codeErreur=0;
	
		try
		{			
			// Ouverture d'une connexion
			connexion=datasource.getConnection();
			
			// Cr�ation de la requ�te
			requeteString="INSERT INTO question (nomquestion, descriptionquestion, coefficientquestion, etatquestion, id_axe) VALUES(?,?,?,?,?)";
			
			// Pr�paration de la requ�te
			requete=connexion.prepareStatement(requeteString);
			requete.setString(1, question.getNom());
			requete.setString(2, question.getDescription());
			requete.setDouble(3,question.getCoefficient());
			requete.setInt(4, question.getEtat());
			requete.setInt(5, question.getSsaxe().getId());
			
			// On vide la question par s�curit�
			question = null;
			
			// Execution de la requ�te
			codeErreur=requete.executeUpdate();
		}
		catch(Exception e)
		{
			codeErreur=0;
			System.out.println("Erreur dans la requete dans la classe ModeleQuestion fonction ajouterQuestion");
		}
		finally
		{
			try
			{
				// Fermeture de la connexion
				if(resultat!=null)
				{
					GestionBaseDeDonnees.closeResulset(resultat);
				}
				if(requete!=null)
				{
					GestionBaseDeDonnees.closeRequest(requete);
				}
				if(connexion!=null)
				{
					GestionBaseDeDonnees.closeConnection(connexion);
				}
			}
			catch(Exception ex)
			{
				System.out.println("Erreur lors de la fermeture de la connexion avec la base de donn�es dans la classe ModeleQuestion fonction ajouterQuestion");
			}	
		}
		
		// Retourner le code d'erreur
		return codeErreur;
	}
	
	
	
	// Supprimer une question
	public int supprimerQuestion(int idQuestion)
	{	
		// Variables
		PreparedStatement requete=null;
		String requeteString=null;
		int codeErreur=0;
	
		try
		{	

			// Ouverture d'une connexion
			connexion=datasource.getConnection();
			
			// Annulation de l'autocommit
			connexion.setAutoCommit(false);
			
			// Premi�re requ�te : suppression de la question
			requeteString="DELETE FROM question WHERE id_question = ?";
			
			// Pr�paration de la requ�te
			requete=connexion.prepareStatement(requeteString);
			requete.setInt(1, idQuestion);
			
			// Execution de la requ�te
			codeErreur=requete.executeUpdate();
			
			// Si il n'y a pas eu d'erreur durant la suppression de la question, on fait un commit, sinon un rollback.
			if(codeErreur==1)
			{
				GestionBaseDeDonnees.commit(connexion);
			}
			else
			{
				GestionBaseDeDonnees.rollback(connexion);
			}
		}
		catch(Exception e)
		{
			codeErreur=0;
			GestionBaseDeDonnees.rollback(connexion);
			System.out.println("Erreur dans la requete dans la classe ModeleQuestion fonction supprimerQuestion");
		}
		finally
		{
			try
			{
				// Fermeture de la connexion
				if(resultat!=null)
				{
					GestionBaseDeDonnees.closeResulset(resultat);
				}
				if(requete!=null)
				{
					GestionBaseDeDonnees.closeRequest(requete);
				}
				if(connexion!=null)
				{
					GestionBaseDeDonnees.closeConnection(connexion);
				}
			}
			catch(Exception ex)
			{
				System.out.println("Erreur lors de la fermeture de la connexion avec la base de donn�es dans la classe ModeleQuestion fonction supprimerQuestion");
			}	
		}
		
		// Retourner le code d'erreur
		return codeErreur;
	}
	
	
	
	
	// Modifier une question
	public int modifierQuestion(Question question)
	{	
		// Variables
		PreparedStatement requete=null;
		String requeteString=null;
		int codeErreur=0;
	
		try
		{			
			// Ouverture d'une connexion
			connexion=datasource.getConnection();
			
			// Cr�ation de la requ�te
			requeteString="UPDATE question set nomquestion = ?, descriptionquestion = ?, coefficientquestion = ?, etatquestion = ?, id_axe = ? WHERE id_question = ?";
			requete=connexion.prepareStatement(requeteString);
			requete.setString(1, question.getNom());
			requete.setString(2, question.getDescription());
			requete.setDouble(3,question.getCoefficient());
			requete.setInt(4, question.getEtat());
			requete.setInt(5, question.getSsaxe().getId());
			requete.setInt(6, question.getId());
			
			// On vide la question par s�curit�
			question=null;
			
			// Execution de la requ�te
			codeErreur=requete.executeUpdate();
		}
		catch(Exception e)
		{
			System.out.println("Erreur dans la requete dans la classe ModeleQuestion fonction modifierQuestion");
		}
		finally
		{
			try
			{
				// Fermeture de la connexion
				if(resultat!=null)
				{
					GestionBaseDeDonnees.closeResulset(resultat);
				}
				if(requete!=null)
				{
					GestionBaseDeDonnees.closeRequest(requete);
				}
				if(connexion!=null)
				{
					GestionBaseDeDonnees.closeConnection(connexion);
				}
			}
			catch(Exception ex)
			{
				System.out.println("Erreur lors de la fermeture de la connexion avec la base de donn�es dans la classe ModeleQuestion fonction modifierQuestion");
			}	
		}
		
		// Retourner le code d'erreur
		return codeErreur;
	}
	
	
	
	// Réaliser la transformation Relationnel vers Objet
	public Question questionAttributsMapper(ResultSet resultat)
	{
		// Variables
		Question question=null;
		ModeleSousAxe modeleSousAxe=null;
		
		// Initialisation des modèles
		modeleSousAxe=new ModeleSousAxe(this.datasource);
		
		// Initalisation de l'objet question
		question=new Question();
		
		try
		{	
			// On renseigne l'objet question
			if(resultat.getString("id_question")==null)
			{
				question.setId(0);
			}
			else
			{
				question.setId(resultat.getInt("id_question"));
			}
			
			if(resultat.getString("nomquestion")==null)
			{
				question.setNom("");
			}
			else
			{
				question.setNom(resultat.getString("nomquestion"));
			}
			
			if(resultat.getString("descriptionquestion")==null)
			{
				question.setDescription("");
			}
			else
			{
				question.setDescription(resultat.getString("descriptionquestion"));
			}
		
			if(resultat.getString("coefficientquestion")==null)
			{
				question.setCoefficient(0.0);
			}
			else
			{
				question.setCoefficient((resultat.getDouble("coefficientquestion")));
			}
			
			if(resultat.getString("etatquestion")==null)
			{
				
				question.setEtat(0);
			}
			else
			{
				question.setEtat(resultat.getInt("etatquestion"));
			}
			
			if(resultat.getString("id_ssaxe")==null)
			{
				question.setSsaxe(new Ssaxe());
			}
			else
			{
				question.setSsaxe(modeleSousAxe.getSsaxe(resultat.getInt("id_ssaxe")));
			}
			
		}
		catch (Exception e) 
		{
			// Si il y a une erreur durant le mapping des attributs avec la base on renvoi un objet null
			question=null;
			System.out.println("Erreur lors du mappage des attributs d'une questions dans la classe ModeleQuestion fonction QuestionAttributsMapper");
		}
		
		// On retourne la question
		return question;
	}
	
	
}
